#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

// 子进程进程替换，不影响父进程执行
int main()
{
    extern char** environ;
    putenv("PRIVATEENV=20241019");
    pid_t id = fork();

    if(id == 0)
    {
        // child
        printf("begin process pid: %d, ppid: %d\n", getpid(), getppid());
        
        //execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
       // execlp("ls", "ls","-a", "-l", NULL);
        //execl("./otherExe", "otherExe", "-a", "-b", "-c", NULL);    
        
        char* const myenv[] = {
            "DATE=1949101",
            "TIME=16:05",
            NULL
        };

        execle("./otherExe", "otherExe", "-a", "-b","-c", NULL, myenv);



        char* const myargv[] = {
            "ls",
            "-a",
            "-l",
            NULL
        };

        //execv("/usr/bin/ls", myargv);
        //execvp("ls", myargv);
        printf("after process pid: %d, ppid: %d\n", getpid(), getppid());
          
        exit(11);
    }
    // father
    pid_t ret = waitpid(id, NULL, 0);
    if(ret > 0)
    {
        printf("wait success pid: %d, ret: %d\n", getpid(), ret); 
    }
    return 0;
}

// 单进程的进程替换
//int main()
//{
//    printf("begin process pid: %d, ppid: %d\n", getpid(), getppid());
//    
//    execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
//
//    printf("after process pid: %d, ppid: %d\n", getpid(), getppid());
//    return 0;
//}
